关于Python的os库与shutil库对文件与文件夹实现复制,移动,删除,创建的14个方法详情的对比

您所在的位置:网站首页 mac os 拷贝文件 关于Python的os库与shutil库对文件与文件夹实现复制,移动,删除,创建的14个方法详情的对比

关于Python的os库与shutil库对文件与文件夹实现复制,移动,删除,创建的14个方法详情的对比

2024-04-17 16:10| 来源: 网络整理| 查看: 265

1. 文件/文件夹操作方法对比1.1 前言

一般情况下,处理文件或文件夹并不算困难,但是需要对一些细节加以注意:

方法是只能操作文件或文件夹还是两者都可以操作目标文件或文件夹是否必须存在目标文件或文件夹存在时是替换还是会报错目标链接的中间文件夹不存在时是否会创建

以下文字会加以对比说明。

1.2 实现功能的方法对比以下涉及七类操作,共14个方法: # 操作 os库 shutil库 # ---------------------------------------------------------------------- # 复制 文件 / shutil.copyfile/copy/copy2 # 复制 文件夹 / shutil.copytree[推荐] # 移动 文件 os.rename/renames/replace shutil.move[推荐] # 移动 文件夹 os.rename/renames/replace shutil.move[推荐] # 删除 文件 os.remove[推荐] / # 删除 文件夹 os.rmdir/removedirs shutil.rmtree[推荐] # 创建 文件夹 os.mkdir/makedirs[推荐] / # ---------------------------------------------------------------------- # 注意: 以上复制与移动操作都可以同时实现重命名文件或文件夹的功能1.3 名词简介os 为operating system的缩写,意为操作系统。shutil 为shell utility的缩写,直译为shell实用程序。src 为source的缩写,为源文件或文件夹的地址。dst 为destination的缩写,为目标文件或文件夹的地址。symlinks 为符号链接或软链接,和超链接相似但不一样,可以通过 右键属性→常规→文件类型 加以区别。windows中可以通过命令提示符mklink创建软连接,也可以通过python的os.symlink来创建。快捷方式和软链接文件属性对比2. 复制文件2.1 shutil的copyfile方法介绍shutil.copyfile(src, dst, *, follow_symlinks=True)

作用:复制一个文件的 数据 到一个文件。参数:src为源文件地址,dst为目标文件地址,follow_symlinks是遵循符号链接,默认为True,即当src为软链接时复制的是软链接指向的文件,若为False则复制软链接本身。注意:若dst文件不存在将会生成该文件,若存在将会被覆盖,且dst是可写的,若和src文件若同名则内容不能相同,否则会报错。返回值:新创建文件所对应的路径。本质浅析:copyfile函数本质上是通过shutil.copyfileobj来实现文件的复制。

附:以下两个方法用来复制文件数据之外的其它信息 shutil.copymode(src, dst, *, follow_symlinks=True) # 复制文件src的权限位到dst shutil.copystat(src, dst, *, follow_symlinks=True) # 复制文件src的权限位、最后访问时间、最后修改时间以及旗标到dst2.2 shutil的copy方法介绍shutil.copy(src,dst,*,follow_symlinks=True)

作用:复制一个文件的 数据+权限模式 到一个文件或文件夹。参数:src为原文件地址,dst为目标文件路径或文件夹路径。返回值:新创建文件所对应的路径。本质浅析:copy函数先调用shutil.copyfile复制内容,后调用shutil.copymode复制其它信息。

2.3 shutil的copy2方法介绍shutil.copy2(src, dst, *, follow_symlinks=True)

作用:复制一个文件的 数据+权限模式+最近访问时间+最近修改时间+旗标 到一个文件或文件夹。参数:src为原文件地址,dst为目标文件路径或文件夹路径。返回值:新创建文件所对应的路径。本质浅析:copy2函数先调用shutil.copyfile复制内容,后调用shutil.copystat复制其它信息。

2.4 方法总结:shutil.copyfile是较基础的文件拷贝方式,它的参数src和dst都必须为文件地址,若dst的目标文件存在且名字和内容都和src一致,就会报错。超链接和其指向的文件也被视为相同的文件。shutil.copy和shutil.copy2都是通过调用shutil.copyfile来实现的复制,它们在shutil.copyfile的基础上加了文件夹判断功能,和文件信息复制功能:copy = dst可为文件夹 + shutil.copyfile + shutil.copymode (复制权限信息)copy2 = dst可为文件夹 + shutil.copyfile + shutil.copystat (复制权限、最后访问时间、最后修改时间等信息)shutil.copy和shutil.copy2都都没有创建文件夹的功能,所以若dst是文件夹则文件夹必须存在。

3. 复制文件夹3.1 shutil的copytree方法介绍shutil.copytree(src,dst,symlinks=False,ignore=None,copy_function=copy2,ignore_dangling_symlinks=False,dirs_exist_ok=False)

作用:递归地将以 src 为根起点的整个目录树拷贝到名为 dst 的目录并返回目标目录。 参数:> src 为原文件夹路径,dst 为目标文件夹路径。> symlinks 默认值为False,复制软链接所指向的文件,若为True,则是复制软链接本身到目标文件夹。> ignore 是用来和shutil.ignore_patterns配合使用,排除具有特定关键词的文件或文件夹。> copy_function 是拷贝文件时使用的shutil方法名,默认使用shutil.copy2。> ignore_dangling_symlinks 当symlinks为假值时,若符号链接所指向的文件不存在,则会在拷贝进程的末尾将一个异常添加到 Error 异常中的错误列表。 如果你希望屏蔽此异常那就将可选的 ignore_dangling_symlinks 旗标设为真值。> dirs_exist_ok 默认值为False,即若dst目标文件夹已存在会报错。若值为True,则用src覆盖dst目标文件夹。返回值:新创建文件夹所对应的路径。本质浅析:copytree函数通过os.makedirs来创建文件夹,通过copy_function指定的方法来复制文件。

3.2 方法总结copytree是将src的目标文件夹复制为dst的目标文件夹,所以src, dst都只能是目录,且若dst目标文件夹存在则需要修改参数dirs_exist_ok值为True。dst的中间文件夹若不存在也会被递归的创建,这是因为调用了os.makedirs。

4. 移动文件和文件夹4.1 shutil的move方法介绍shutil.move(src,dst,copy_function=copy2)作用: 递归地将一个文件或目录 (src) 移至另一位置 (dst) 并返回目标位置。参数:> 移动文件时,src为源文件地址。dst为目标文件或文件夹地址,若为前者,则目标文件不存在则创建,存在则替换;若为后者,则按源文件名创建,若源文件名存在则报错。> 移动文件夹时,src为源文件夹地址,dst为目录地址,若dst目标文件夹存在则源文件夹移动到其下,不存在则创建后将源文件夹的内容移动到其下。返回值:目标文件或文件夹地址。本质浅析:move函数在同一盘符下调用os.rename实现移动,在不同盘符下则是先复制src到dst,后删除src。4.2 os的rename方法介绍os.rename(src,dst,*,src_dir_fd=None,dst_dir_fd=None)

作用:将文件或目录 src 重命名为 dst。如果 dst 已存在,则抛出 FileExistsError 异常。参数:> 移动文件时,src为源文件地址,dst为目标文件地址,目标文件必须不存在。> 移动文件夹时,src为源文件夹地址,dst为目标文件夹地址,目标文件夹必须不存在。返回值:None

4.3 os的renames方法介绍os.renames(old,new)

作用:将文件或目录 old 重命名为 new。并于源路径 old 向上删除空的父目录。参数:> 移动文件时,src为源文件地址,dst为目标文件地址,目标文件必须不存在。> 移动文件夹时,src为源文件夹地址,dst为目标文件夹地址,目标文件夹必须不存在。注意:相较于rename,renames可以为dst创建中间文件夹,也可以在src位置向上递归的删除空的父目录。返回值:None本质浅析:renames函数先调用os.rename来实现文件移动,然后调用os.removedirs实现递归删除空的父目录。

4.4 os的replace方法介绍os.replace(src,dst,*,src_dir_fd=None,dst_dir_fd=None)

作用:将文件或目录 src 重命名为 dst。参数:> 替换文件时,src为源文件地址,dst为目标文件地址,目标文件不存在就创建,存在就替换。> 替换文件夹时,src为源文件夹地址,dst为目标文件夹地址,目标文件夹必须不存在。返回值:None

4.5 方法总结是否删除src的文件/文件夹:无论是移动文件还是文件夹,上述四种方式src位置都会被删除。dst的目标文件/文件夹存在是否会报错:shutil.move会将目标移动到文件夹之下,os的rename,renames,replace若dst目标文件夹存在都会报错,而目标dst是文件时,rename和renames会报错,replace会替换。dst的中间文件夹不存在是否会补全:shutil.move和os的renames会调用os.makedirs补全dst的中间文件夹,但rename和replace不会。其它操作:renames会删除src的父级空目录,一直删到非空为止。其它限制:os的rename,renames,replace只能在同一磁盘内操作。

5. 删除文件5.1 os的remove方法介绍os.remove(path,*,dir_fd=None)

作用: 移除(删除)文件 path。参数:path为文件路径。返回值:None

5.2 方法总结路径 path 必须是文件且存在。如果 path 是文件夹,则抛出 IsADirectoryError 异常。如果文件不存在,则抛出 FileNotFoundError 异常。

6. 删除文件夹6.1 shutil的rmtree方法介绍shutil.rmtree(path,ignore_errors=False,onerror=None,*,dir_fd=None)

作用:删除一个完整的目录树(目录以及目录内的所有内容) 参数:path必须为文件夹,且不能是一个软链接。返回值:None

6.2 os的rmdir方法介绍os.rmdir(path, *, dir_fd=None)

作用:删除一个空文件夹 path。参数:path 为空文件夹地址返回值:None

6.3 os的removedirs方法介绍os.removedirs(name)

作用:删除一个空文件夹 name,如果删除成功,会递归的从 name 位置向上依次删除为空的父目录,参数:name 为空文件夹地址返回值:None本质浅析:removedirs函数调用os.rmdir来实现对空文件的逐级删除。

6.4 方法总结os.rmdir只能删除一个空文件夹,相对而言比较安全,可以用于不能确定是否情况目录的情况。os.removedirs可以递归的删除空文件夹,相对而言比较安全,可以用于清空链式空目录。shutil.rmtree能删除非空文件夹,使用需谨慎。

7. 创建文件夹 7.1 os的mkdir方法介绍os.mkdir(path,mode=0o777,*,dir_fd=None)

作用:创建一个名为 path 的文件夹,并设置其权限 mode。参数:path 为一个文件夹地址,目标文件夹应不存在。mode 指定创建的目录权限,默认为0o777,即最高权限。返回值:None

7.2 os的makedirs方法介绍os.makedirs(name,mode=0o777,exist_ok=False)

作用:递归目录创建函数。与 mkdir() 类似,但会自动创建到达最后一级目录所需要的中间目录。参数:name为目标文件夹地址,若中间目录不存在会递归的创建中间目录,若目标文件夹存在会报错,可以通过修改exist_ok参数为True避免报错。mode 指定创建的目录权限,默认为0o777,即最高权限。返回值:None本质浅析:makedirs函数通过调用os.mkdir来实现递归的目录创建。

7.3 方法总结os.mkdir只能创建目标文件夹,且若目标文件夹存在会报错。os.makedirs可以创建目标文件夹以及不存在的中间文件夹,若目标文件夹存在可以通过修改exist_ok参数为True来避免报错。随手总结,如有错误,欢迎指正! 2023年10月14日23:42:49



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3